#include "List/simclist_impl.h"
#ifndef QUERY_MANAGEMENT_H_

struct check_sublist_struct {
        list_t    *superpeer_list; //sotto-lista dei superpeer alla quale si è assegnati
        char      *fileName; //nome del file da cercare
        int        upperSocket; //socket TCP a cui ritornare la risposta
        int        lowerSocket; //socket TCP a cui ricevere la lista dal SP che ha risposto
        int        peerSocket;
        list_t    *my_file_list; //rappresenta la lista locale del superpeer, se != NULL significa che il metodo è stato chiamato dal SP stesso (e non da un peer)
        list_t    *file_list;
        list_t    *peer_file_list;
        in_addr_t  superpeer_ip;
        in_addr_t  my_ip;
        fd_set    *mem_set;
};
typedef struct check_sublist_struct check_sublist_struct_t;


void send_list(char *name,int socket );
void serve_query_request(void* arguments);
void get_file_superpeer(void* arguments);
int get_file_peer(void* arguments);
int query_flooding(void* arguments);
void send_peer_list(void* arguments);
int check_request_on_sublist(void* arguments);
void find_file_routine(void* arguments);
void query_help_routine(void *arguments);
int getPeerList(in_addr_t sp_ip,char* fileName);

#define QUERY_MANAGEMENT_H_


#endif
